package com.atguigu.gmall.cdc.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Rege {
    public static void main(String[] args) {
        //注：预搜索匹配的是位置，不是具体字符，要谨记，而位置即两个字符间的夹缝，没有宽度。
        //例如："ab"的中间有个位置，"a b"中a和空格间有个位置，空格和b之间也有个位置
        //1、预搜索的括号不作为一个组，它不记录预搜索括号内匹配到的字符串
        //2、预搜索匹配的字符串的位置，^(?<!hello\s)是错误的用法，因为‘^’匹配的是开始位置，预搜索不能匹配位置的位置
        //3、预搜索四种使用
        //      合法：正则1-正向预搜索  反向预搜索-正则1
        //      合法：正则1-正向预搜索1-正向预搜索2   和    反向预搜索1-反向预搜索1-正则1
        //      合法：反向预搜索-正则1-正向预搜索
        //      合法：正则1-正向预搜索-正则2
        String str1 = "java and python,java good,lang";

        //正向预搜索,(?=good)匹配的是位置，即匹配后面跟着good字符串的 java\\s
        Pattern p1 = Pattern.compile("java\\s(?=good)");
        //正向预搜索不匹配，(?!good)匹配的是后面没有跟着good字符串的 java\\s
        Pattern p2 = Pattern.compile("java\\s(?!good)");
        //反向预搜索,(?<=hello\\s)匹配的是位置，即匹配紧跟 hello\\s 的java 预搜索的括号不作为一个组
        Pattern p3 = Pattern.compile("(?<=hello\\s)java");
        //反向预搜索不匹配，(?<!hello\\s)不匹配紧跟 hello\\s 的 java
        Pattern p4 = Pattern.compile("(?<!hello\\s)java");
        //下面的表达式 (?<=and\\s) 匹配的是python前的位置，这个位置前面是 and\\s
        //因此若将表达式写成 java\\s(?<=and\\s)python 是匹配不到字符串的
        Pattern p5 = Pattern.compile("and\\s(?<=and\\s)python");

        Matcher m1 = p4.matcher(str1);
       while (m1.find()) {

           System.out.println("0: " + m1.group(0)); //java
           System.out.println("匹配后的剩余字符：" + str1.substring(m1.end()));// good
       }
    }
}
